home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / pcfig4th.zip / BREAK4TH.SCR < prev    next >
Text File  |  1985-04-23  |  8KB  |  1 lines

  1.                           BREAKFORTH                                                                                            This is a real time video game written entirely in high-level   FORTH.  This particular version has a few routines specific to tIBM-PC, but may be easily modified for any terminal which       supports random cursor addressing.                                                                                              The game requires the STRING character array primitive, and the terminal graphics definitions.                                                                                                  The game is started by typing BREAKFORTH.  The paddle is        controlled by the left and right shift keys on the IBM.  The    speed may be adjusted by setting the variable SPEED before      starting the game (1 fastest, 200 slowest and 0 is a blitz!).                                                                                                                                   ( math: RANDOM  )                                               ( RANDOM NUMBER GENERATOR, J. E. Rickenbacker )                 ( FORTH DIMENSIONS II/2 PAGE 34               )                                                                                 FORTH DEFINITIONS DECIMAL                                                                                                       0 VARIABLE SEED                                                                                                                 : (RAND) SEED @ 259 * 3 + 32767 AND DUP SEED ! ;                                                                                 ( n -- r  : select a random # r, 0<= r < n )                   : RANDOM (RAND) 32767 */ ;                                      -->                                                                                                                                                                                                                                                             ( games: BREAKFORTH )                                           FORTH DEFINITIONS DECIMAL                                       : TASK ;                                                        400 ARRAY BLOCKMAP  5 ARRAY BLOCKS  5 ARRAY SCORES              50 VARIABLE SPEED  0 VARIABLE SPVAR  0 VARIABLE SCORE            0 VARIABLE XPOS   0 VARIABLE YPOS   0 VARIABLE PPOS             1 VARIABLE YDIR   1 VARIABLE XDIR   0 VARIABLE BEST            : LINE     0 SWAP GOTOXY 80 SPACES ;                            : BALLSET  GOTOXY 111 EMIT HOME ;                               : BALLCLR  GOTOXY 32 EMIT HOME ;                                : PDLSET   PPOS @ 22 GOTOXY 220 220 220 EMIT EMIT EMIT HOME ;   : PDLCLR   PPOS @ 22 GOTOXY 32 32 32 EMIT EMIT EMIT HOME ;      HEX    : SOUND  06E 061 PC! ;  : QUIET  06C 061 PC! ;           : BEEP 64 0 DO  SOUND QUIET QUIET QUIET LOOP ;                  : BOP   64 0 DO  SOUND SOUND SOUND QUIET QUIET QUIET LOOP ;     -->                                                             ( games: BREAKFORTH, cont. )                                    : L/R        40 17 LC@  03 AND  CASE 02 OF -1 ENDOF                          01 OF 1 ENDOF 0 SWAP ENDCASE ;                     DECIMAL                                                         : PADDLE     L/R -DUP IF PDLCLR PPOS @ + 20 MAX 57 MIN PPOS !                ENDIF PDLSET ;                                     : BLOCKMAPINDEX  40 * SWAP 2 / + ;                              : BLKTST     YPOS @ 8 < IF XPOS @ YPOS @ BLOCKMAPINDEX                       BLOCKMAP @ ELSE 0 ENDIF ;                          : BLKCLR     2DUP SWAP 126 AND SWAP GOTOXY 32 EMIT 32 EMIT                   BLOCKMAPINDEX BLOCKMAP 0 SWAP ! ;                  : BLKSET     2DUP GOTOXY DUP 6 - ABS BLOCKS @ DUP EMIT EMIT                  BLOCKMAPINDEX BLOCKMAP 1 SWAP ! ;                  : WALLSET     59 20 DO I 1 AND 0= IF I 2 BLKSET I 3 BLKSET I 4                BLKSET I 5 BLKSET I 6 BLKSET ENDIF LOOP ; -->                                                                     ( games: BREAKFORTH, cont. )                                    219 0 BLOCKS !  178 1 BLOCKS !  177 2 BLOCKS !                  176 3 BLOCKS !   32 4 BLOCKS !   0 VARIABLE MAXSCORE            : INIT   CLS 10 ( #BALLS )                                               5 0 DO I 1+ 5 * I SCORES ! LOOP                                 61 19 DO I 1 GOTOXY 220  EMIT LOOP                              22 1  DO 19 I GOTOXY 222 EMIT                                            60 I GOTOXY 221 EMIT                                   LOOP  WALLSET 0 SCORE ! 0 LINE                                  7 2 DO 16 I GOTOXY I 6 - ABS SCORES ? LOOP               22 0 GOTOXY ." score: 0 " 35 0 GOTOXY ." best: " BEST ?         50 0 GOTOXY  DUP 0 DO 111 EMIT SPACE LOOP                     20 DUP 4 SCORES @ * OVER 3 SCORES @ * + OVER 2 SCORES @ * +     OVER   1 SCORES @ * + OVER 0 SCORES @ * + MAXSCORE ! DROP ;     -->                                                                                                                             ( games: BREAKFORTH, cont. )                                    : XCHK XPOS @ 20 < IF XDIR @ MINUS XDIR ! 20 XPOS ! BOP THEN           XPOS @ 59 > IF XDIR @ MINUS XDIR ! 59 XPOS ! BOP THEN ;  : SPVAR!  SPVAR @ SWAP MIN SPVAR ! ;                            : YCHK    YPOS @ DUP 7 < IF  8 SPVAR! ENDIF                               DUP  6 < IF  7 SPVAR! ENDIF                                     DUP  5 < IF  6 SPVAR! ENDIF                                     DUP  4 < IF  5 SPVAR! ENDIF                                     DUP  3 < IF  4 SPVAR! ENDIF                                          2 < IF  1 YDIR ! 2 YPOS ! 1 SPVAR ! BOP ENDIF ;  10 ARRAY PDLVEC  -2 0 PDLVEC ! -1 1 PDLVEC ! 0 2 PDLVEC !                         1 3 PDLVEC !  2 4 PDLVEC !                    : PCHK    0 YPOS @ 21 > IF                                                  21 YPOS ! XPOS @ PPOS @ - 1+ DUP 0< 0= OVER 5 < AND             IF -1 YDIR ! BEEP PDLVEC @ DUP 0= IF                            DROP ELSE XDIR ! ENDIF        -->                   ( games: BREAKFORTH, cont. )                                                ELSE DROP 1+ ENDIF                                            ENDIF ;                                               : DELAY   SPEED @ SPVAR @ U* DROP 0 DO LOOP ;                   : CLR     XPOS @ YPOS @ BLKCLR                                            YPOS @ 6 - ABS SCORES @ SCORE +! 29 0 GOTOXY SCORE ?            BOP YDIR @ MINUS YDIR ! ;                             : BALLCHK YDIR @ YPOS +!  XDIR @ XPOS +! XCHK YCHK PCHK                   BLKTST IF CLR ENDIF ;                                 : BALL    XPOS @ YPOS @ BALLCLR  BALLCHK DUP 0= IF                        XPOS @ YPOS @ BALLSET HOME ENDIF ;                    : GAMECHK SCORE @ -DUP IF MAXSCORE - 0< 0= IF WALLSET THEN                THEN ;                                                -->                                                                                                                                                                                             ( games: BREAKFORTH, cont. )                                    : BREAKFORTH                                                      BEGIN   40 PPOS ! INIT  0 DO                                            50 I 2 * + 0 GOTOXY SPACE   10 SPVAR !                          2000 SPEED @ / 200 MIN 0 DO DELAY PADDLE LOOP                   2 RANDOM 1 = IF 1 ELSE -1 ENDIF XDIR ! 1 YDIR !                 35 RANDOM 22 + XPOS ! 8 YPOS !                                  BEGIN 3 0 DO PADDLE LOOP DELAY                                          BALL GAMECHK UNTIL                                      LOOP  SCORE @ BEST @ MAX BEST !                                 22 LINE 34 22 GOTOXY ." again ?" KEY DUP 78 = SWAP              110 = OR UNTIL ;                                      ;S